home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / PInterfaces / Unicode.p < prev    next >
Text File  |  1996-05-01  |  13KB  |  331 lines

  1. {
  2.      File:        Unicode.p
  3.  
  4.      Contains:    Unicode Interfaces.
  5.  
  6.      Version:    Technology:    System 7.1 through System 8
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. }
  18. {$IFC UNDEFINED UsingIncludes}
  19. {$SETC UsingIncludes := 0}
  20. {$ENDC}
  21.  
  22. {$IFC NOT UsingIncludes}
  23.  UNIT Unicode;
  24.  INTERFACE
  25. {$ENDC}
  26.  
  27. {$IFC UNDEFINED __UNICODE__}
  28. {$SETC __UNICODE__ := 1}
  29.  
  30. {$I+}
  31. {$SETC UnicodeIncludes := UsingIncludes}
  32. {$SETC UsingIncludes := 1}
  33.  
  34. {$IFC UNDEFINED __TYPES__}
  35. {$I Types.p}
  36. {$ENDC}
  37. {$IFC UNDEFINED __TEXTCOMMON__}
  38. {$I TextCommon.p}
  39. {$ENDC}
  40. {$IFC UNDEFINED __MIXEDMODE__}
  41. {$I MixedMode.p}
  42. {$ENDC}
  43.  
  44. {$PUSH}
  45. {$ALIGN MAC68K}
  46. {$LibExport+}
  47.  
  48. {$IFC 0 }
  49. {
  50.  The following 7 typedefs are required for seeds until they get
  51.  moved to a future version of Types.[hp] in a future ETO release.
  52.  Also note that seeds should include a copy of the new TextCommon.[hp].
  53. }
  54.  
  55. TYPE
  56.     BytePtr                                = ^UInt8;
  57.     ByteCount                            = UInt32;
  58.     ItemCount                            = UInt32;
  59.     OptionBits                            = UInt32;
  60.     RegionCode                            = INTEGER;
  61.     ByteOffset                            = UInt32;
  62.     ConstLogicalAddress                    = LogicalAddress;
  63. {
  64.  The following typedefs are required for seeds until they get
  65.  moved to a future version of Errors.[hp] in a future ETO release.
  66.  Unicode Converter Error Codes
  67. }
  68.  
  69. CONST
  70.     unicodeChecksumErr            = -8769;
  71.     unicodeNoTableErr            = -8768;
  72.     unicodeVariantErr            = -8767;
  73.     unicodeFallbacksErr            = -8766;
  74.     unicodePartConvertErr        = -8765;
  75.     unicodeBufErr                = -8764;
  76.     unicodeCharErr                = -8763;
  77.     unicodeElementErr            = -8762;
  78.     unicodeNotFoundErr            = -8761;
  79.     unicodeTableFormatErr        = -8760;
  80.     unicodeDirectionErr            = -8759;
  81.     unicodeContextualErr        = -8758;
  82.     unicodeTextEncodingDataErr    = -8757;
  83.  
  84. {$ENDC}
  85. {$IFC FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE }
  86. {  Unicode Converter Gestalt Constants: (****these belong in Gestalt.i****)  }
  87.  
  88. CONST
  89.     gestaltUnicodeAttr            = 'unic';
  90.     gestaltUnicodeConverterPresent = 0;
  91.     gestaltUnicodeConverterMask    = $00000001;
  92.  
  93. {  Basic types for Unicode characters and strings:  }
  94.  
  95. TYPE
  96.     UniCharArrayPtr                        = ^UniChar;
  97.     ConstUniCharArrayPtr                = ^UniChar;
  98. {  Unicode conversion contexts:  }
  99.     TextToUnicodeInfo = ^LONGINT;
  100.     UnicodeToTextInfo = ^LONGINT;
  101.     UnicodeToTextRunInfo = ^LONGINT;
  102.     ConstTextToUnicodeInfo                = TextToUnicodeInfo;
  103.     ConstUnicodeToTextInfo                = UnicodeToTextInfo;
  104. {  UnicodeMapVersion type & values  }
  105.     UnicodeMapVersion                    = SInt32;
  106.  
  107. CONST
  108.     kUnicodeUseLatestMapping    = -1;
  109.  
  110. {  Types used in conversion  }
  111.  
  112. TYPE
  113.     UnicodeMappingPtr = ^UnicodeMapping;
  114.     UnicodeMapping = RECORD
  115.         unicodeEncoding:        TextEncoding;
  116.         otherEncoding:            TextEncoding;
  117.         mappingVersion:            UnicodeMapVersion;
  118.     END;
  119.  
  120.     ConstUnicodeMappingPtr                = ^UnicodeMapping;
  121.     TextEncodingRunPtr = ^TextEncodingRun;
  122.     TextEncodingRun = RECORD
  123.         offset:                    ByteOffset;
  124.         textEncoding:            TextEncoding;
  125.     END;
  126.  
  127. {  Control flags for ConvertUnicodeToText and ConvertTextToUnicode  }
  128.  
  129. CONST
  130.     kUnicodeUseFallbacksBit        = 0;
  131.     kUnicodeKeepInfoBit            = 1;
  132.     kUnicodeDirectionalityBits    = 2;
  133.     kUnicodeVerticalFormBit        = 4;
  134.     kUnicodeLooseMappingsBit    = 5;
  135.     kUnicodeStringUnterminatedBit = 6;
  136.     kUnicodeTextRunBit            = 7;
  137.     kUnicodeKeepSameEncodingBit    = 8;
  138.  
  139.     kUnicodeUseFallbacksMask    = $00000001;
  140.     kUnicodeKeepInfoMask        = $00000002;
  141.     kUnicodeDirectionalityMask    = $0000000C;
  142.     kUnicodeVerticalFormMask    = $00000010;
  143.     kUnicodeLooseMappingsMask    = $00000020;
  144.     kUnicodeStringUnterminatedMask = $00000040;
  145.     kUnicodeTextRunMask            = $00000080;
  146.     kUnicodeKeepSameEncodingMask = $00000100;
  147.  
  148. {  Values for kUnicodeDirectionality field  }
  149.     kUnicodeDefaultDirection    = 0;
  150.     kUnicodeLeftToRight            = 1;
  151.     kUnicodeRightToLeft            = 2;
  152.  
  153. {  Control flags for TruncateForUnicodeToText:  }
  154.     kUnicodeTextElementSafeBit    = 0;
  155.     kUnicodeRestartSafeBit        = 1;
  156.  
  157.     kUnicodeTextElementSafeMask    = $00000001;
  158.     kUnicodeRestartSafeMask        = $00000002;
  159.  
  160. {  Filter bits for QueryUnicodeMappings filter field:  }
  161.     kUnicodeMatchUnicodeBaseBit    = 0;
  162.     kUnicodeMatchUnicodeVariantBit = 1;
  163.     kUnicodeMatchUnicodeFormatBit = 2;
  164.     kUnicodeMatchOtherBaseBit    = 3;
  165.     kUnicodeMatchOtherVariantBit = 4;
  166.     kUnicodeMatchOtherFormatBit    = 5;
  167.  
  168.     kUnicodeMatchUnicodeBaseMask = $00000001;
  169.     kUnicodeMatchUnicodeVariantMask = $00000002;
  170.     kUnicodeMatchUnicodeFormatMask = $00000004;
  171.     kUnicodeMatchOtherBaseMask    = $00000008;
  172.     kUnicodeMatchOtherVariantMask = $00000010;
  173.     kUnicodeMatchOtherFormatMask = $00000020;
  174.  
  175. {  Control flags for SetFallbackUnicodeToText  }
  176.     kUnicodeFallbackSequencingBits = 0;
  177.  
  178.     kUnicodeFallbackSequencingMask = $00000003;
  179.  
  180. {  values for kUnicodeFallbackSequencing field  }
  181.     kUnicodeFallbackDefaultOnly    = 0;
  182.     kUnicodeFallbackCustomOnly    = 1;
  183.     kUnicodeFallbackDefaultFirst = 2;
  184.     kUnicodeFallbackCustomFirst    = 3;
  185.  
  186. {$ENDC}
  187. {$IFC FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE }
  188. {  Caller-supplied entry point to a fallback handler  }
  189.  
  190. TYPE
  191.     UnicodeToTextFallbackProcPtr = ProcPtr;  { FUNCTION UnicodeToTextFallback(VAR srcUniStr: UniChar; srcUniStrLen: ByteCount; VAR srcConvLen: ByteCount; destStr: BytePtr; destStrLen: ByteCount; VAR destConvLen: ByteCount; contextPtr: LogicalAddress; unicodeMappingPtr: ConstUnicodeMappingPtr): OSStatus; }
  192.  
  193.     UnicodeToTextFallbackUPP = UniversalProcPtr;
  194.  
  195. CONST
  196.     uppUnicodeToTextFallbackProcInfo = $003FFFF0;
  197.  
  198. FUNCTION NewUnicodeToTextFallbackProc(userRoutine: UnicodeToTextFallbackProcPtr): UnicodeToTextFallbackUPP;
  199.     {$IFC NOT GENERATINGCFM }
  200.     INLINE $2E9F;
  201.     {$ENDC}
  202.  
  203. FUNCTION CallUnicodeToTextFallbackProc(VAR srcUniStr: UniChar; srcUniStrLen: ByteCount; VAR srcConvLen: ByteCount; destStr: BytePtr; destStrLen: ByteCount; VAR destConvLen: ByteCount; contextPtr: LogicalAddress; unicodeMappingPtr: ConstUnicodeMappingPtr; userRoutine: UnicodeToTextFallbackUPP): OSStatus;
  204.     {$IFC NOT GENERATINGCFM}
  205.     INLINE $205F, $4E90;
  206.     {$ENDC}
  207. {$ENDC}
  208. {$IFC FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE }
  209.  
  210. TYPE
  211.     UnicodeToTextFallbackPreemptiveProcPtr = ProcPtr;  { FUNCTION UnicodeToTextFallbackPreemptive(VAR srcUniStr: UniChar; srcUniStrLen: ByteCount; VAR srcConvLen: ByteCount; destStr: BytePtr; destStrLen: ByteCount; VAR destConvLen: ByteCount; contextPtr: LogicalAddress; unicodeMappingPtr: ConstUnicodeMappingPtr): OSStatus; }
  212.  
  213. {  Function prototypes  }
  214. {
  215.  The following are in TextCommon.i:
  216.  CreateTextEncoding, GetTextEncodingBase, GetTextEncodingVariant, GetTextEncodingFormat
  217. }
  218. {  Create a new TextToUnicodeInfo structure.  }
  219. FUNCTION CreateTextToUnicodeInfo(UnicodeMapping: ConstUnicodeMappingPtr; VAR textToUnicodeInfo: TextToUnicodeInfo): OSStatus;
  220.     {$IFC NOT GENERATINGCFM}
  221.     INLINE $303C, $0401, $ABCE;
  222.     {$ENDC}
  223. {  Create a new UnicodeToTextInfo structure.  }
  224. FUNCTION CreateUnicodeToTextInfo(UnicodeMapping: ConstUnicodeMappingPtr; VAR unicodeToTextInfo: UnicodeToTextInfo): OSStatus;
  225.     {$IFC NOT GENERATINGCFM}
  226.     INLINE $303C, $040C, $ABCE;
  227.     {$ENDC}
  228. FUNCTION CreateUnicodeToTextRunInfo(numberOfMappings: ItemCount; UnicodeMapping: ConstUnicodeMappingPtr; VAR unicodeToTextInfo: UnicodeToTextRunInfo): OSStatus;
  229.     {$IFC NOT GENERATINGCFM}
  230.     INLINE $303C, $0612, $ABCE;
  231.     {$ENDC}
  232. {  Dispose of a TextToUnicodeInfo structure.  }
  233. FUNCTION DisposeTextToUnicodeInfo(VAR textToUnicodeInfo: TextToUnicodeInfo): OSStatus;
  234.     {$IFC NOT GENERATINGCFM}
  235.     INLINE $303C, $0202, $ABCE;
  236.     {$ENDC}
  237. {  Dispose of a UnicodeToTextInfo structure.  }
  238. FUNCTION DisposeUnicodeToTextInfo(VAR unicodeToTextInfo: UnicodeToTextInfo): OSStatus;
  239.     {$IFC NOT GENERATINGCFM}
  240.     INLINE $303C, $020D, $ABCE;
  241.     {$ENDC}
  242. FUNCTION DisposeUnicodeToTextRunInfo(VAR unicodeToTextInfo: UnicodeToTextRunInfo): OSStatus;
  243.     {$IFC NOT GENERATINGCFM}
  244.     INLINE $303C, $0213, $ABCE;
  245.     {$ENDC}
  246. {  Convert a string to Unicode.  }
  247. FUNCTION ConvertTextToUnicode(textToUnicodeInfo: TextToUnicodeInfo; sourceLen: ByteCount; sourceStr: ConstLogicalAddress; controlFlags: OptionBits; offsetCount: ItemCount; VAR offsetArray: ByteOffset; bufLen: ByteCount; VAR sourceRead: ByteCount; VAR unicodeLen: ByteCount; unicodeStr: UniCharArrayPtr): OSStatus;
  248.     {$IFC NOT GENERATINGCFM}
  249.     INLINE $303C, $1404, $ABCE;
  250.     {$ENDC}
  251. {  Convert a string from Unicode.  }
  252. FUNCTION ConvertUnicodeToText(unicodeToTextInfo: UnicodeToTextInfo; unicodeLen: ByteCount; unicodeStr: ConstUniCharArrayPtr; controlFlags: OptionBits; offsetCount: ItemCount; VAR offsetArray: ByteOffset; bufLen: ByteCount; VAR inputRead: ByteCount; VAR outputLen: ByteCount; outputStr: LogicalAddress): OSStatus;
  253.     {$IFC NOT GENERATINGCFM}
  254.     INLINE $303C, $1403, $ABCE;
  255.     {$ENDC}
  256. FUNCTION ConvertUnicodeToTextRun(unicodeToTextInfo: UnicodeToTextRunInfo; unicodeLen: ByteCount; unicodeStr: ConstUniCharArrayPtr; controlFlags: OptionBits; offsetCount: ItemCount; VAR offsetArray: ByteOffset; bufLen: ByteCount; VAR inputRead: ByteCount; VAR outputLen: ByteCount; outputStr: LogicalAddress; encodingRunBufLen: ItemCount; VAR encodingRunOutLen: ItemCount; VAR encodingRuns: TextEncodingRun): OSStatus;
  257.     {$IFC NOT GENERATINGCFM}
  258.     INLINE $303C, $1A14, $ABCE;
  259.     {$ENDC}
  260. {  Truncate a multibyte string at a safe place.  }
  261. FUNCTION TruncateForTextToUnicode(textToUnicodeInfo: ConstTextToUnicodeInfo; sourceLen: ByteCount; sourceStr: ConstLogicalAddress; maxLen: ByteCount; VAR truncatedLen: ByteCount): OSStatus;
  262.     {$IFC NOT GENERATINGCFM}
  263.     INLINE $303C, $0A06, $ABCE;
  264.     {$ENDC}
  265. {  Truncate a Unicode string at a safe place.  }
  266. FUNCTION TruncateForUnicodeToText(unicodeToTextInfo: ConstUnicodeToTextInfo; sourceLen: ByteCount; sourceStr: ConstUniCharArrayPtr; controlFlags: OptionBits; maxLen: ByteCount; VAR truncatedLen: ByteCount): OSStatus;
  267.     {$IFC NOT GENERATINGCFM}
  268.     INLINE $303C, $0C05, $ABCE;
  269.     {$ENDC}
  270. {  Convert a Pascal string to Unicode.  }
  271. FUNCTION ConvertPStringToUnicode(textToUnicodeInfo: TextToUnicodeInfo; pascalStr: Str255; bufLen: ByteCount; VAR unicodeLen: ByteCount; unicodeStr: UniCharArrayPtr): OSStatus;
  272.     {$IFC NOT GENERATINGCFM}
  273.     INLINE $303C, $0A08, $ABCE;
  274.     {$ENDC}
  275. {  Convert a Unicode string to Pascal.  }
  276. FUNCTION ConvertUnicodeToPString(unicodeToTextInfo: UnicodeToTextInfo; unicodeLen: ByteCount; unicodeStr: ConstUniCharArrayPtr; VAR pascalStr: Str255): OSStatus;
  277.     {$IFC NOT GENERATINGCFM}
  278.     INLINE $303C, $0807, $ABCE;
  279.     {$ENDC}
  280. {  Get a list of the available conversion mappings.  }
  281. FUNCTION QueryUnicodeMappings(filter: OptionBits; findMapping: ConstUnicodeMappingPtr; maxCount: ItemCount; VAR actualCount: ItemCount; returnedMappings: UnicodeMappingPtr): OSStatus;
  282.     {$IFC NOT GENERATINGCFM}
  283.     INLINE $303C, $0A09, $ABCE;
  284.     {$ENDC}
  285. {  Get the name of a TextEncodingBase table.  }
  286. FUNCTION GetTextEncodingBaseName(UnicodeMapping: ConstUnicodeMappingPtr; languageID: LangCode; bufLen: ByteCount; VAR nameLength: ByteCount; mappingName: UniCharArrayPtr): OSStatus;
  287.     {$IFC NOT GENERATINGCFM}
  288.     INLINE $303C, $090A, $ABCE;
  289.     {$ENDC}
  290. {  Change the TextToUnicodeInfo to another mapping.  }
  291. FUNCTION ChangeTextToUnicodeInfo(textToUnicodeInfo: TextToUnicodeInfo; UnicodeMapping: ConstUnicodeMappingPtr): OSStatus;
  292.     {$IFC NOT GENERATINGCFM}
  293.     INLINE $303C, $040B, $ABCE;
  294.     {$ENDC}
  295. {  Change the UnicodeToTextInfo to another mapping.  }
  296. FUNCTION ChangeUnicodeToTextInfo(unicodeToTextInfo: UnicodeToTextInfo; UnicodeMapping: ConstUnicodeMappingPtr): OSStatus;
  297.     {$IFC NOT GENERATINGCFM}
  298.     INLINE $303C, $040E, $ABCE;
  299.     {$ENDC}
  300. {$ENDC}
  301. {$IFC FOR_SYSTEM8_PREEMPTIVE }
  302. {  Setup the fallback handler for converting Unicode To Text.  }
  303. FUNCTION SetFallbackUnicodeToTextPreemptive(unicodeToTextInfo: UnicodeToTextInfo; fallback: UnicodeToTextFallbackPreemptiveProcPtr; controlFlags: OptionBits; infoPtr: LogicalAddress): OSStatus;
  304. FUNCTION SetFallbackUnicodeToTextRunPreemptive(unicodeToTextRunInfo: UnicodeToTextRunInfo; fallback: UnicodeToTextFallbackPreemptiveProcPtr; controlFlags: OptionBits; infoPtr: LogicalAddress): OSStatus;
  305. {$ENDC}
  306. {$IFC FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE }
  307. {  Setup the fallback handler for converting Unicode To Text.  }
  308. FUNCTION SetFallbackUnicodeToText(unicodeToTextInfo: UnicodeToTextInfo; fallback: UnicodeToTextFallbackUPP; controlFlags: OptionBits; infoPtr: LogicalAddress): OSStatus;
  309.     {$IFC NOT GENERATINGCFM}
  310.     INLINE $303C, $080F, $ABCE;
  311.     {$ENDC}
  312. FUNCTION SetFallbackUnicodeToTextRun(unicodeToTextRunInfo: UnicodeToTextRunInfo; fallback: UnicodeToTextFallbackUPP; controlFlags: OptionBits; infoPtr: LogicalAddress): OSStatus;
  313.     {$IFC NOT GENERATINGCFM}
  314.     INLINE $303C, $0819, $ABCE;
  315.     {$ENDC}
  316. {
  317.  The following are in TextCommon.i:
  318.  UpgradeScriptInfoToTextEncoding, RevertTextEncodingToScriptInfo
  319. }
  320. {$ENDC}
  321. {$ALIGN RESET}
  322. {$POP}
  323.  
  324. {$SETC UsingIncludes := UnicodeIncludes}
  325.  
  326. {$ENDC} {__UNICODE__}
  327.  
  328. {$IFC NOT UsingIncludes}
  329.  END.
  330. {$ENDC}
  331.